dd6dd7cac76803141cb879f52b80729da4219435,src/org/jgroups/stack/GossipRouter.java,ConnectionHandler,readLoop,#,634
Before Change
ConcurrentMap<Address,ConnectionHandler> map;
if(log.isTraceEnabled())
log.trace("Received " + request + " on socket " + sock);
switch(command) {
After Change
Address addr;
String group;
try {
request=new GossipData();
request.readFrom(input);
byte command=request.getType();
addr=request.getAddress();
group=request.getGroup();
known_groups.add(group);
ConcurrentMap<Address,ConnectionHandler> map;
if(log.isTraceEnabled())
log.trace(this + " received " + request);
switch(command) {
case GossipRouter.CONNECT:
handleConnect(request, addr, group);
break;
case GossipRouter.PING:
// do nothing here - client doesn't expect response data
break;
case GossipRouter.MESSAGE:
if(request.buffer == null || request.buffer.length == 0) {
if(log.isWarnEnabled())
log.warn(this +" received null message");
break;
}
try {
route(addr, request.getGroup(), request.getBuffer());
}
catch(Exception e) {
if(log.isErrorEnabled())
log.error(this +" failed in routing request to " + addr, e);
}
break;
case GossipRouter.GOSSIP_GET:
Set<PhysicalAddress> physical_addrs;
List<PingData> mbrs=new ArrayList<PingData>();
map=routingTable.get(group);
if(map != null) {
for(Address logical_addr: map.keySet()) {
physical_addrs=address_mappings.get(logical_addr);
PingData rsp=new PingData(logical_addr, null, true, UUID.get(logical_addr),
physical_addrs != null? new ArrayList<PhysicalAddress>(physical_addrs) : null);
mbrs.add(rsp);
}
}
output.writeShort(mbrs.size());
for(PingData data: mbrs)
data.writeTo(output);
output.flush();
if(log.isDebugEnabled())
log.debug(this + " responded to GOSSIP_GET with " + mbrs);
break;
case GossipRouter.DISCONNECT:
try {
removeEntry(group, addr);
sendData(new GossipData(DISCONNECT_OK));
if(log.isDebugEnabled())
log.debug(this + " disconnect completed");
}
catch(Exception e) {
sendData(new GossipData(OP_FAIL));
}
break;
case GossipRouter.CLOSE:
close();
break;
case -1: // EOF
notifyAbnormalConnectionTear(this, new EOFException("Connection broken"));
break;
}
if(log.isTraceEnabled())
log.trace(this + " processed " + request);
}
catch(SocketTimeoutException ste) {
}